package com.paradogs.gs.modules.equip;

import com.paradogs.common._cfg.Cfg;
import com.paradogs.gs.db.Equip;
import com.paradogs.gs.db.EquipBase;
import com.paradogs.gs.misc.DBSingleRowManager;
import com.paradogs.gs.misc.annotations.GameManager;
import com.paradogs.gs.modules.equip.dao.*;
import com.paradogs.gs.modules.equip.enums.EquipPart;

/**
 * @author: yumi
 * @date: 2024/12/31  9:51
 * @Description: TODO
 */
@GameManager
public class EquipBaseMgr extends DBSingleRowManager<EquipBaseDao, EquipBase> {
    @Override
    public void onInitialization(EquipBase data) {
        data.setWeapon(new EquipWrap());
        data.setHead(new EquipWrap());
        data.setBody(new EquipWrap());
        data.setWaist(new EquipWrap());
        data.setGlove(new EquipWrap());
        data.setShoe(new EquipWrap());
    }

    public void wear(Long equipId) {
        Equip equip = owner().equipMgr().get(equipId);
        owner().equipMgr().__del__(equip);
        EquipBase base = __get__();
        Cfg.Equip cfg = Cfg.Equip.get(equip.getItemId());
        switch (EquipPart.of(cfg.part())) {
            case WEAPON -> {
                EquipWrap wrap = base.getWeapon();
                if (wrap.has()) { owner().equipMgr().__update__(wrap.equip); }
                wrap.setEquip(equip);
            }
            case HEADER -> {
                EquipWrap wrap = base.getHead();
                if (wrap.has()) { owner().equipMgr().__update__(wrap.equip); }
                wrap.setEquip(equip);
            }
            case BODY -> {
                EquipWrap wrap = base.getBody();
                if (wrap.has()) { owner().equipMgr().__update__(wrap.equip); }
                wrap.setEquip(equip);
            }
            case WAIST -> {
                EquipWrap wrap = base.getWaist();
                if (wrap.has()) { owner().equipMgr().__update__(wrap.equip); }
                wrap.setEquip(equip);
            }
            case GLOVE -> {
                EquipWrap wrap = base.getGlove();
                if (wrap.has()) { owner().equipMgr().__update__(wrap.equip); }
                wrap.setEquip(equip);
            }
            case SHOE -> {
                EquipWrap wrap = base.getShoe();
                if (wrap.has()) { owner().equipMgr().__update__(wrap.equip); }
                wrap.setEquip(equip);
            }
        }
        __update__(base);
    }


}
